package qlsl.androiddesign.library.datepicker;

import java.util.ArrayList;

import com.qlsl.androiddesign.appname.R;

import android.view.View;

public class WheelOptions {
	private View view;
	private WheelView wv_option1;
	private WheelView wv_option2;
	private WheelView wv_option3;
	
	private ArrayList<String> mOptions1Items;
	private ArrayList<ArrayList<String>> mOptions2Items;
	private ArrayList<ArrayList<ArrayList<String>>> mOptions3Items;
	public int screenheight;
	
	public View getView() {
		return view;
	}

	public void setView(View view) {
		this.view = view;
	}

	public WheelOptions(View view) {
		super();
		this.view = view;
		setView(view);
	}
	
	public void setPicker(ArrayList<String> optionsItems) {
		setPicker(optionsItems,null,null,false);
	}
	public void setPicker(ArrayList<String> options1Items,ArrayList<ArrayList<String>> options2Items,boolean linkage) {
		setPicker(options1Items,options2Items,null,linkage);
	}
	@SuppressWarnings({ "unchecked", "rawtypes" })
	public void setPicker(ArrayList<String> options1Items,ArrayList<ArrayList<String>> options2Items,ArrayList<ArrayList<ArrayList<String>>> options3Items,boolean linkage) {
		this.mOptions1Items=options1Items;
		this.mOptions2Items=options2Items;
		this.mOptions3Items=options3Items;
		int len = ArrayWheelAdapter.DEFAULT_LENGTH;
		if(this.mOptions3Items==null)len = 8;
		if(this.mOptions2Items==null)len = 12;
		// 选项1
		wv_option1 = (WheelView) view.findViewById(R.id.options1);
		wv_option1.setAdapter(new ArrayWheelAdapter(mOptions1Items,len));// 设置显示数据
		wv_option1.setCurrentItem(0);// 初始化时显示的数据
		// 选项2
		wv_option2 = (WheelView) view.findViewById(R.id.options2);
		if(mOptions2Items!=null)
		wv_option2.setAdapter(new ArrayWheelAdapter(mOptions2Items.get(0)));// 设置显示数据
		wv_option2.setCurrentItem(wv_option1.getCurrentItem());// 初始化时显示的数据
		// 选项3
		wv_option3 = (WheelView) view.findViewById(R.id.options3);
		if(mOptions3Items!=null)
		wv_option3.setAdapter(new ArrayWheelAdapter(mOptions3Items.get(0).get(0)));// 设置显示数据
		wv_option3.setCurrentItem(wv_option3.getCurrentItem());// 初始化时显示的数据

		// 根据屏幕密度来指定选择器字体的大小(不同屏幕可能不同)
		int textSize = (screenheight / 100) * 4;
		
		wv_option1.TEXT_SIZE = textSize;	
		wv_option2.TEXT_SIZE = textSize;	
		wv_option3.TEXT_SIZE = textSize;
		
		if(this.mOptions2Items==null)wv_option2.setVisibility(View.GONE);
		if(this.mOptions3Items==null)wv_option3.setVisibility(View.GONE);
		

		//联动监听器
		OnWheelChangedListener wheelListener_option1 = new OnWheelChangedListener() {
			
			@Override
			public void onChanged(WheelView wheel, int oldValue, int newValue) {
				wv_option2.setAdapter(new ArrayWheelAdapter(mOptions2Items.get(wv_option1.getCurrentItem())));
				wv_option2.setCurrentItem(0);
				wv_option3.setAdapter(new ArrayWheelAdapter(mOptions3Items.get(wv_option1.getCurrentItem()).get(wv_option2.getCurrentItem())));
				wv_option3.setCurrentItem(0);
			}
		};
		OnWheelChangedListener wheelListener_option2 = new OnWheelChangedListener() {
			
			@Override
			public void onChanged(WheelView wheel, int oldValue, int newValue) {
				wv_option3.setAdapter(new ArrayWheelAdapter(mOptions3Items.get(wv_option1.getCurrentItem()).get(wv_option2.getCurrentItem())));
				wv_option3.setCurrentItem(0);
			}
		};
		
		//添加联动监听
		if(options2Items!=null&&linkage)
		wv_option1.addChangingListener(wheelListener_option1);
		if(options3Items!=null&&linkage)
		wv_option2.addChangingListener(wheelListener_option2);
	}
	/**
	 * 设置选项的单位
	 * @param label1
	 * @param label2
	 * @param label3
	 */
	public void setLabels(String label1,String label2,String label3){
		if(label1!=null)
		wv_option1.setLabel(label1);
		if(label2!=null)
		wv_option2.setLabel(label2);
		if(label3!=null)
		wv_option3.setLabel(label3);
	}

	/**
	 * 设置是否循环滚动
	 * @param cyclic
	 */
	public void setCyclic(boolean cyclic){
		wv_option1.setCyclic(cyclic);
		wv_option2.setCyclic(cyclic);
		wv_option3.setCyclic(cyclic);
	}
	/**
	 * 返回当前选中的结果对应的位置数组
	 * 因为支持三级联动效果，分三个级别索引，0，1，2
	 * @return
	 */
	public int[] getCurrentItems(){
		int[] currentItems = new int[3];
		currentItems[0] = wv_option1.getCurrentItem();
		currentItems[1] = wv_option2.getCurrentItem();
		currentItems[2] = wv_option3.getCurrentItem();
		return currentItems;
	}
	public void setCurrentItems(int option1, int option2, int option3){
		wv_option1.setCurrentItem(option1);
		wv_option2.setCurrentItem(option2);
		wv_option3.setCurrentItem(option3);
	}
}
